package impl

import (
	"context"
	"demo/p4/demoApi/demo-api/apps/host"
	"fmt"
)

func (h *HostServiceImpl) Save(ctx context.Context, ins *host.Host) error {
	var err error
	tx, err := h.db.BeginTx(ctx, nil)
	if err != nil {
		fmt.Printf("start tx error, %s", err)
		return err
	}

	defer func() {
		if err != nil {
			if err := tx.Rollback(); err != nil {
				fmt.Printf("tx Rollback error, %s", err)
			}
		} else {
			if err := tx.Commit(); err != nil {
				fmt.Printf("tx Commit error, %s", err)
			}
		}
	}()

	// 插入Resource数据
	resmt, err := tx.Prepare(InsertResourceSQL)
	if err != nil {
		return err
	}
	defer resmt.Close()
	_, err = resmt.Exec(ins.Id, ins.Vendor, ins.Region, ins.CreateAt, ins.ExpireAt, ins.Type,
		ins.Name, ins.Description, ins.Status, ins.UpdateAt, ins.SyncAt, ins.Account, ins.PublicIP,
		ins.PrivateIP)
	if err != nil {
		return err
	}

	// 插入Resource数据
	desmt, err := tx.Prepare(InsertDescribeSQL)
	if err != nil {
		return err
	}
	defer desmt.Close()
	_, err = desmt.Exec(ins.Id, ins.CPU, ins.Memory, ins.GPUAmount, ins.GPUSpec,
		ins.OSType, ins.OSName, ins.SerialNumber)
	if err != nil {
		return err
	}
	return nil
}
